home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
dev
/
e
/
amigae21b.lha
/
Amiga_E_v2.1b
/
Sources
/
Utilities
/
ShowModule.e
< prev
next >
Wrap
Text File
|
1992-09-02
|
3KB
|
106 lines
/* ShowModule.e; dumps all the infos in a '.m' binary file */
ENUM JOB_DONE,JOB_CONST,JOB_OBJ,JOB_LIB=6
ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_JOBID,ER_BREAK,ER_FILETYPE
DEF flen,o:PTR TO INT,mem,handle=NIL
PROC main() HANDLE
WriteF('ShowModule v0.1 (c) 1992 $#%!\n')
WriteF('now showing: "\s"\n',arg)
WriteF('NOTE: don\at use this output in your code, use the module instead.\n\n')
IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2)
Raise(ER_USAGE)
ELSE
flen:=FileLength(arg)
handle:=Open(arg,OLDFILE)
IF (flen<8) OR (handle=NIL)
Raise(ER_FILE)
ELSE
mem:=New(flen)
IF mem=NIL
Raise(ER_MEM)
ELSE
IF Read(handle,mem,flen)<>flen THEN Raise(ER_FILE)
Close(handle)
handle:=NIL
process()
ENDIF
ENDIF
ENDIF
EXCEPT
IF handle THEN Close(handle)
WriteF('\n')
SELECT exception
CASE ER_FILE; WriteF('Could not read file "\s" !\n',arg)
CASE ER_MEM; WriteF('No memory for loading module!\n')
CASE ER_USAGE; WriteF('USAGE: ShowModule <module>\n')
CASE ER_JOBID; WriteF('Illegal job id!\n')
CASE ER_BREAK; WriteF('User interupted ShowModule\n')
CASE ER_FILETYPE; WriteF('Not an E module file.\n')
ENDSELECT
ENDPROC
PROC process()
DEF end,job,len,val,f,off,types:PTR TO LONG,c,r,c2
o:=mem
end:=o+flen
types:=['substructure','CHAR','INT','','LONG']
IF ^o++<>"EMOD" THEN Raise(ER_FILETYPE)
WHILE o<end
IF CtrlC() THEN Raise(ER_BREAK)
job:=o[]++
SELECT job
CASE JOB_CONST
len:=o[]++; f:=TRUE
WHILE len
val:=^o++
IF f THEN WriteF('CONST ') ELSE WriteF(' ')
WriteF('\s=',o)
IF (val>=-$20) AND (val<$20) THEN WriteF('\d',val) ELSE WriteF('$\h',val)
o:=o+len; len:=o[]++; f:=FALSE
IF len THEN WriteF(',\n') ELSE WriteF('\n\n')
IF CtrlC() THEN Raise(ER_BREAK)
ENDWHILE
CASE JOB_OBJ
len:=o[]++;
WriteF('(---) OBJECT \s\n',o+4)
o:=o+4+len
WHILE len:=o[]++
val:=o[]++
off:=o[]++
WriteF('(\d[3]) \s:\s\n',off,o,types[val])
o:=o+len
IF CtrlC() THEN Raise(ER_BREAK)
ENDWHILE
val:=o[]++
WriteF('(---) ENDOBJECT /* SIZEOF=')
WriteF(IF val<>$FFFF THEN '\d */\n\n' ELSE 'NONE !!! */\n\n',val)
CASE JOB_LIB
c:=o
WHILE c[]++ DO NOP
WriteF('LIBRARY \a\s\a, \s /* informal notation */\n',o,c)
WHILE c[]++ DO NOP
WHILE (c[]<>$FF) AND (c<end)
c2:=c
WHILE c[]++>" " DO NOP; c--
r:=c[]; c[]++:=0
WriteF(' \s\c',c2,"(")
WHILE r<" "
IF r<16 THEN IF r<8 THEN WriteF('D\d',r) ELSE WriteF('A\d',r-8)
r:=c[]++
IF r<16 THEN WriteF(',')
ENDWHILE
c--
WriteF(')\n')
ENDWHILE
WriteF('ENDLIBRARY\n\n')
o:=end
CASE JOB_DONE
o:=end
DEFAULT
Raise(ER_JOBID)
ENDSELECT
ENDWHILE
ENDPROC